RDS Proxy, Amazon Kendra, Amazon CodeGuruの紹介 #cmregrowth #reinvent
弊社はre:Invent振り返り勉強会 re:Growth 2019 OSAKA を開催いたしました。お越し下さった皆々様、ありがとうございました!!
私は、個人的に気になったRDS Proxy, Amazon Kendra, Amazon CodeGuruをご紹介させていただきました。以下登壇内容です。
注意点:3サービスともプレビューです
- 今後サービス内容が変わる可能性があります
- 突然サービス停止する可能性があります
- 「やってみた」情報を開示することはNGです
詳しくは以下ブログエントリをご覧ください。
RDS Proxy
問題点 Lambda - RDSはアンチパターン
その理由として、これまで以下のようなことが挙げられていました。
- 接続処理(コネクションプーリング難しい)の問題
- 同時接続数の問題
- IPアドレス枯渇問題
- コールドスタートの問題
このうち、IPアドレス枯渇問題は9月にリリースされたHyperplane ENIによって改善されました。 また、コールドスタートの問題も、Hyperplane ENIと、re:Invent中に発表された Provisioned Concurrencyによって改善されました。
- 【速報】もうアンチパターンとは呼ばせない!!VPC Lambdaのコールドスタート改善が正式アナウンスされました!!
- [速報]コールドスタート対策のLambda定期実行とサヨナラ!! LambdaにProvisioned Concurrencyの設定が追加されました #reinvent
接続処理問題、同時接続数の問題が残っています。
接続処理もしくは同時接続数の問題
一般的にLambdaでコネクションプーリング(リクエスト間でDB接続を共有する)を使うのは困難でした。これによってDB接続処理が多発し
- DBリソースを消費
- 処理遅延
- 同時接続数上限に引っかかりやすい→エラー
ということが発生します。ですのでアンチパターン、と言われてきました。 (要件次第では問題にならない場合もあります。ですのであらゆる場面でアンチパターンというわけではありません。)
この部分を改善するサービスが、今回発表されたRDS Proxyです。
RDS Proxy
これまで
これから(RDS Proxyあり構成)
Lambda(アプリ)とRDSとの間にRDS Proxyを設置する構成が取れるようになりました。こうすることで面倒な実装なしでコネクションプーリングを実現することができ、先ほどご紹介した接続処理にまつわる問題を緩和することができます。また、RDS Proxyはプロビジョニング、パッチ当て等も不要なマネージドサービスです(NAT Gatewayとかみたいなイメージ)。ですので運用負荷があがることもありません。アプリ側(コード)も接続エンドポイントをRDSのものからProxyのものに変えるだけで利用可能です。簡単!
効果
以下は先週開催されたServerless Night Osakaにて、AWSのSAの方が実施されたRDS Proxyのデモ結果です。同じワークロードを、RDS Proxyない構成とある構成どちらでも試してみて、DBの同時接続数がどう変わるかというのを調べた結果です。如実に効果が出ています!
というわけで、RDS Proxyのおかげで今後は Lambda - RDSの構成を取れる要件の幅がより拡がりそうです!
関連エントリ
RDS Proxyは決してLambdaのためだけのサービスではありません。フェイルオーバー時間を短縮できる効果などもあるのですが、時間の都合でそのあたりの説明は省きました。詳しくは以下をご覧ください。
弊社サーバーレスつよつよエンジニア岩田のエントリもあわせてどうぞ
Kendra
Kendraはざっくりいうと企業向け検索サービスです。ではまず、検索に現在どのような問題があるのか見てみましょう。
問題点: 検索は難しい
調査
以下のような調査結果があるそうです。
- 従業員はその労働時間の20%を情報を探すのに費やしている
- 仕事をするにあたり必要な情報を44%しか見つけることができていない
- → このように、検索する(=必要な情報を探す)ことに苦労している結果、従業員一人当たり年間5,700ドル(約62万円)の損失が発生している
原因は?
- どこで検索したら良いかわからない
- データソースが分散している
- キーワード検索
- 単にキーワードに合致した文書を拾っているだけなので、ヒットした情報が欲しいものとは限らない
- インデックス化しにくい
- 非構造化データ、様々な形式のフォーマット、、
Amazon Kendra
機械学習による高精度エンタープライズ向け検索サービス
どのような特長があるか見ていきましょう。
あらゆるデータソースと接続し、それらを対象にまとめて検索できる
先ほどお話しした「どこで検索したら良いかわからない」という問題は、データソースを全てKendraに食わせれば、Kendraからの検索=全ソースに対しての検索という状況を実現できます。Kendraは上記ソースとの接続をコンソール上で簡単に設定できるように対応予定です。現段階ではS3、RDS、Sharepoint Onlineのみの対応です。(なお、ここに挙がっていないソースでもコードを書けば接続可能です)
対話的な検索ができる(質問を理解している/文書内容も理解している)
Kendraは機械学習によって質問内容を理解することができます。また検索対象となる文書群の内容も理解しています。ですので、より対話的な、人に尋ねると同じような方法で検索することができます。対してKendraは質問内容を理解していますので、(キーワード検索に比べて)より直接的な回答を返してくれます。
以下はユーザーがKendraを使うUI例です。一番上の「Where is the it supprt in kumo?(kumoにはITサポートデスクがどこにありますか?)」がユーザーの行なった検索です。(kumoはamazonオフィスが入っているビル名らしいです)
Kendraはこの質問に対して端的に「1st floor(一階です)」と答えることができます。これによりユーザーは検索に費やす時間(検索結果から自身の知りたい情報を探す時間)を大幅に減らすことができます。(後ろにその情報元文書のリンク、関連FAQなどが続きますので、関連する情報をもっと知りたい場合にも役立ちます)
精度が向上し続ける
学習を繰り返すことで精度を上げ続けることができます。
以下を材料に学習し続けます。
- ユーザーどの回答をクリックしたか
- Good・Badのフィードバックボタン(のクリック数)
その他の特長
- 専門領域の情報も理解する
- IT/金融/保険/製薬/工業/エネルギー/法律/メディア/観光…
- チューニング可能
- 最新の文書を優先、特定のデータソースからの文書を優先など
- デプロイが簡単
- コンソールからサンプルコードダウンロード可能
- API経由でも使える
- 機械学習の知識不要
残念ながら現在は英語のみ対応
はやく日本語対応してほしい!
CodeGuru
問題: コードレビューは高コスト
- エンジニアのリソースが必要(人力)
- 高度なスキルが要求される
- 高度なスキルを持つエンジニアをアサインできたとしても、それでも問題を見落とす可能性がある
- レビュー時に問題を見落とすと、後工程で対処しないといけなくなり、さらにコストが増す(本番環境で障害が発生したら…?)
CodeGuru
二つの機能があります。
- CodeGuru Reviewer
- CodeGuru Profiler
CodeGuru Reviewer
自動コードレビュー機能です。以下のようなことをレビューしてくれます。
- スレッドセーフになっているか
- サニタイズされてない入力はないか
- 機密データを不適切に扱っていないか
- リソースリークが起きていないか
- AWSのAPIやSDKをベストプラクティスに沿って使えているか
以下はCodeGuru Reviewerのレビュー例です。問題点、修正方法、補足情報、サンプルコードととても親切にレビューしてくれています。(こんな丁寧なレビューしたことないや、、)
現在のところ対応リポジトリはGitHubとCodeCommit、対応言語はJavaのみとなっています。どんどん他の言語も追加して欲しいですね!
CodeGuru Profiler
自動パフォーマンス測定機能です。プログラム実行環境にAgentを常駐させることで、そのAgentが「高い(=CPU利用率が高い/遅い)」処理や行を教えてくれます。
問題のある処理を指摘し、改善策も提案してくれます。
現在のところ、EC2/ECS/EKS/Fargateで動くJavaアプリに対して実行可能です。
ProfilerはAmazon内部ですでに使用中だとのこと。Prime Dayにおいて前年に比べCPU使用率が325%向上、コスト39%削減できたそうです。すごい。
おしまい
RDS Proxy、Kendra、CodeGuru、それぞれの素晴らしさが伝わっていれば幸いでございます。
繰り返しますが、これら3サービスすべてプレビュー版です。ですのでまだ本番利用はお控えください。はやくGAになって欲しいですね!